import Vue from 'vue'
import App from './App.vue'
import { createPinia } from 'pinia'
import '@/static/styles/global.scss'

/**
 * 应用入口文件
 * 初始化Vue应用和全局配置
 */

// 性能监控接口
interface PerfMonitor {
  startTime: number
  pageStats: Record<string, number>
  logPageLoad(page: string): void
  startResourceTiming(): void
}

// 性能监控实现
const perfMonitor: PerfMonitor = {
  startTime: Date.now(),
  pageStats: {},
  
  logPageLoad(page: string) {
    const loadTime = Date.now() - this.startTime
    this.pageStats[page] = loadTime
    console.log(`[Perf] ${page} loaded in ${loadTime}ms`)
    
    if (process.env.NODE_ENV === 'production') {
      uni.reportAnalytics('page_load', {
        page,
        duration: loadTime
      })
    }
  },
  
  startResourceTiming() {
    uni.onWindowResize((res) => {
      console.debug('[Perf] Window resize:', res)
    })
    
    uni.onPageScroll((res) => {
      console.debug('[Perf] Page scroll:', res)
    })
  }
}

// 启动性能监控
perfMonitor.startResourceTiming()

// 禁用生产环境提示
Vue.config.productionTip = false

// 初始化Pinia状态管理
const pinia = createPinia()

// 错误处理
Vue.config.errorHandler = (err, vm, info) => {
  console.error('Vue error:', err, info)
  uni.showToast({
    title: '应用发生错误',
    icon: 'none'
  })
}

// 创建并挂载Vue实例
try {
  const app = new Vue({
    pinia,  // 使用Pinia作为状态管理
    ...App
  }).$mount('#app')  // 统一使用带选择器的挂载方式
} catch (error) {
  console.error('应用初始化失败:', error)
  uni.showModal({
    title: '初始化错误',
    content: '应用初始化失败，请刷新重试',
    showCancel: false
  })
}